Como desproteger un fichero BASIC o BINARIO o ASCII PROTEGIDO AMSDOS de CPC?
-----------------------------------------------------------------------------
Por Optimux - optimux@yahoo.com


	Los ficheros con cabeceras AMSDOS de Amstrad CPC, que actualmente se utilizan en los emuladores, a veces estan progetidos contra LECTURA aunque son perfectamente EJECUTABLES. Esta es una de las medidas de proteccion bajo AMSDOS para ficheros original del propio sistema. Para desproteger estos ficheros, cualesquiera sea su tipo; basic, binario o ASCII, basta con seguir los siguientes pasos:

1.- Localizar donde esta la cabezera AMSDOS del fichero a desproteger

	1.2.- Si esta dentro en un fichero de disco DSK de Marco Vieth, sus primeros bytes son: "MV - CPCEMU DisK", hemos de buscar la cadena correspondiente al NOMBRE del fichero que queremos desproteger. Utilizar cualquier editor HEXadecimal que tengais. Primeramente encontraresmos las ocurrencias de este nombre en la tabla de accesos del disco CPC "FAT", pero eso no es lo que  buscamos. Seguiremos buscando hasta que nos encontremos con el mismo NOMBRE de fichero otra vez, JUNTO a la ESTRUCUTURA de CABECERA AMSDOS, que es realativamente facil de reconocer, porque trans el NOMBRE hay unos cuantos bytes (descritos al final de este documentos) y bastantes CEROS, a los cuales siguen siempre el codigo fuente del programa CPC.

	1.2.- Si esta dentro de un fichero de CASETE o CINTA previamente exportado al directorio TAPE, es decir individualmente, tendremos inmediatamente la CABEZERA AMSDOS con el nombre del fichero que buscamos.


2.- Si estamos seguros de que se trata de un fichero PROTEGIDO, basta con cambiar los TRES BYTES con un editor HEXadecimal. Primero hemos de saber que la cabecera AMSDOS empieza exactamente UN BYTE MENOS que donde encontramos el primer caracter del NOMBRE del FICHERO; es decir en el BYTE del USUARIO. Este ser el BYTE CERO de la cabezera. (Mirar descripticion al final de este documento). Los TRES BYTES a cambiar los proporciono en los pasos "3.-" y "4.-" a continuacion.

3.- En el BYTE #12 (12 en hexadecimal, 18 en decimal) hemos de escribir el mismo valor pero con una unidad menos. 

	3.1.- Si tiene un "3" hemos de escirbir un "2", y si tubiera un "1" hemos de escribir un "0".(Mirar TABLA de Tipos de FICHERO)

	3.2.- Resumiendo: BYTE[#12]=BYTE[#12]-1


4.- En los BYTES #43 y #44 (67 y 68 en decimal) contienen el CHECKSUM de la CABECERA AMSDOS, es decir, una simple suma de todos sus bytes para asegurar la carga correcta del fichero si fallos. 

	4.1.- Esta informacion esta guardada en estos DOS BYTES porque ocupa un numero de 16 bits, con rango de "0" hasta de "65535" o "#FFFF" en hexadecimal. Este numero de 16 bits, en los procesadores Z80 o como en TODOS los COMPATIBLES 8086 esta guardado AL REVES, cortesia de INTEL que trabajaba para IBM cuando creo el PC, asi que Zilog (de esta casa viene lo de "Z"80) o Mostek (otra productora) se vieron obligados a almacenar los numeros de 16 bits AL REVES. Si ves el valor "#34","#01" el numero 16 bits sera: "#0134"

	4.2.- Como hemos modificado el BYTE de TIPO de FICHERO, es decir la CABEZERA AMSDOS, tambien tendremos que modificar el numero de 16 bits del CHECKSUM, simplemente RESTANDOLE una UNIDAD. Para ello, sacar una calculadora, copiar el numero en el formato hexadecimal, restarle UNO y volverlo a almacenarlo en la misma posicin y en el mismo orden en el que estaba (formato 16 bits de INTEL), mucho cuidadado al leer y escribir el este numero.

	4.3.- Resumiendo: WORD[#43-#44]=WORD[#43-#44]-1

5.- Salvar el fichero y probar su lectura.

------------------------------------------------------------------------




  Byte de TIPO de FICHERO AMSDOS #12
  ----------------------------------
  valores	Tipo de Fichero
  
  00		BASIC
  01		BASIC PROTEGIDO
  02		BINARIO
  03		BINARIO PROTEGIDO
  04		VOLCADO de PANTALLA
  06		ASCII o CP/M

  Signicado de los Bits de TIPO de FICHERO
  ----------------------------------------
  bit		Valores		Siginficado
 
  0		0-1		Un 1 indica PROTECCION contra LECTURA
  1-3		000 = 0		BASIC
		001 = 1		BINARIO
		010 = 2		VOLCADO de PANTALLA
		011 = 3		ASCII o CP/M
  4-7		000		No es ASCII
		001		ASCII
		Resto		NO definido

  Observar que aadiendo #24 a el byte de tipo, forma los codigos de caracteres que identifican los tipos de ficheros para CASETE:

	BASIC			#00+#24="$"
	BASIC PROTEGIDO 	#01+#24="%"
	BINARIO			#10+#24="&"
	BINARIO PROTEGIDO	#11+#24="'"
	
	El bit 5 de la entrada para ASCII se ignora.
	
------------------------------------------------------------------------
  			    

  Cabecera AMSDOS
  ----------------------
    Puedes ver esta cabezera en el mismo fichero AMSDOS que contiene el archivo para CPC, o si puedes cargar discho archivo, podras examinar la copia de la Cabecera que el AMSDOS hace en la memoria del CPC en las siguientes direcciones:

    Para el 6128, si lees desde la unidad de disco: &A756
    Para el 6128, si lees desde la cinta de casete: &B1A3
    Para el 464,  si lees desde la cinta de casete: &B88C


    Byte (hex):  Significado:
    00           nmero de usuario (0 , valores posibles 0-15)
    01 - 0F      nombre de fichero+extensin (posiblemente rellenado con 0)
    10           nmero de bloque (0)
    11           flag del ltimo bloque (0)
    12           tipo de fichero (0=basic, 1=basic protegido, 2=binario,...)
    13 - 14      tamao del bloque (0)
    15 - 16      direccin de carga (0-FFFF)
    17           primera flag de bloque (0)
    18 - 19      tamao lgico (0-FFFF)
    1A - 1B      direccin de entrada (0-FFFF)
    1C - 3F      de uso libre para el usuario (0)
    40 - 42      tamao real de un fichero (1-FFFFFF)
    43 - 44      checksum de los bytes 00-42
    45 - 7F      sin usar (valores aleatorios del buffer del sector)

    Anotacin:
    Hay una cabecera al principio de todos los ficheros que no son ASCII.
    Se le identifica calculando el checksum.
    Los bytes 00-3F se originan en el "area de casete", donde los ficheros
    se habrn distribudo en bloques.
    Los bytes 12, 15-16, 1A-1B, 40-42, 43-44 son necesarios.

------------------------------------------------------------------------
